﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Interfaces;
using System.Collections;

namespace Model
{
    public class ProjektColl
    {
        // atributter
        private List<Projekt> projekter;

        // konstruktør
        public ProjektColl()
        {
            projekter = new List<Projekt>();
        }

        #region Operationer på Projekt-objekter

        // Metode til at oprette et projekt-objekt og tilføje det til listen med projekter
        public void OpretProjekt(int projektNr, string titel, DateTime starttidspunkt, string projektfase, string deadline)
        {
            Projekt projekt = new Projekt(projektNr, titel, starttidspunkt, projektfase, deadline);
            projekter.Add(projekt);
        }

        // Metode til at finde et projektobjekt
        public Projekt FindProjekt(int projektNr)
        {
            foreach (Projekt p in projekter)
            {
                if (p.ProjektNr == projektNr)
                {
                    return p;
                }
            }

            return null;
        }

        // Metode til at redigere et projektobjekt
        public void RedigerProjekt(int projektNr, string titel, DateTime starttidspunkt, string projektfase, string deadline,
            string tidsforbrug, DateTime sluttidspunkt, bool aktiv)
        {
            Projekt projekt = FindProjekt(projektNr);
            projekt.Titel = titel;
            projekt.Starttidspunkt = starttidspunkt;
            projekt.Projektfase = projektfase;
            projekt.Deadline = deadline;
            projekt.Tidsforbrug = tidsforbrug;
            projekt.Sluttidspunkt = sluttidspunkt;
            projekt.Aktiv = aktiv;
        }

        // Metode til at redigere et projekt-objekts antal af timer og min
        public void OpdaterProjektsTidsforbrug(int projektNr, string tidsforbrug)
        {
            Projekt projekt = FindProjekt(projektNr);
            projekt.Tidsforbrug = tidsforbrug;
        }

        // kald af metode til at hente projekt iterator
        public IEnumerator GetProjekter()
        {
            return projekter.GetEnumerator();
        }

        #endregion

        #region Associeringsmetoder

        // kald af metode til at associere et kunde-objekt til et projekt-objekt
        public void TilknytKunde(int projektNr, Kunde enKunde)
        {
            Projekt projekt = FindProjekt(projektNr);
            projekt.TilknytKunde(enKunde);
        }

        // kald af metode til at hente det associerede kunde-objekt
        public Kunde GetMinKunde(int projektNr)
        {
            Projekt projekt = FindProjekt(projektNr);
            return projekt.GetMinKunde();
        }

        // kald af metode til at fjerne det associerede kunde-objekt
        public void FjernKunde(int projektNr)
        {
            Projekt projekt = FindProjekt(projektNr);
            projekt.FjernKunde();
        }

        // kald af metode til at associere et medarbejder-objekt til et projekt-objekt
        public void TilknytProjektleder(int projektNr, Medarbejder enProjektleder)
        {
            Projekt projekt = FindProjekt(projektNr);
            projekt.TilknytProjektleder(enProjektleder);
        }

        // kald af metode til at hente det associerede medarbejder-objekt
        public Medarbejder GetMinProjektleder(int projektNr)
        {
            Projekt projekt = FindProjekt(projektNr);
            return projekt.GetMinProjektleder();
        }

        // kald af metode til at fjerne et associeret medarbejder-objekt
        public void FjernProjektleder(int projektNr)
        {
            Projekt projekt = FindProjekt(projektNr);
            projekt.FjernProjektleder();
        }

        #endregion
    }
}
